package com.ruoyi.product.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.product.domain.vo.UpdateVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.SpecProductMapper;
import com.ruoyi.product.domain.SpecProduct;
import com.ruoyi.product.service.ISpecProductService;

/**
 * 商品规格分类Service业务层处理
 * 
 * @author cs
 * @date 2024-07-25
 */
@Service
public class SpecProductServiceImpl implements ISpecProductService 
{
    @Autowired
    private SpecProductMapper specProductMapper;

    /**
     * 查询商品规格分类
     * 
     * @param id 商品规格分类主键
     * @return 商品规格分类
     */
    @Override
    public SpecProduct selectSpecProductById(Long id)
    {
        return specProductMapper.selectSpecProductById(id);
    }

    /**
     * 查询商品规格分类列表
     * 
     * @param specProduct 商品规格分类
     * @return 商品规格分类
     */
    @Override
    public List<SpecProduct> selectSpecProductList(SpecProduct specProduct)
    {
        return specProductMapper.selectSpecProductList(specProduct);
    }

    /**
     * 新增商品规格分类
     * 
     * @param specProduct 商品规格分类
     * @return 结果
     */
    @Override
    public int insertSpecProduct(SpecProduct specProduct)
    {
        //先看数据库有没有当前规格名
        SpecProduct specProduct1=specProductMapper.selectSpecProductBySpecName(specProduct.getSpecName());
        if (specProduct1!=null){
            //查找当前规格
            SpecProduct specProduct2 = specProductMapper.selectSpecProductById(specProduct1.getId());
            specProduct.setId(specProduct1.getId());
            specProduct.setSpecName(specProduct.getSpecName().replaceAll(" ",""));
            specProduct.setProductName(specProduct.getProductName().replaceAll(" ",""));
            specProduct.setProductProp(specProduct.getProductProp().replaceAll(" ",""));
            //判断是否包含当前商品规格
            if (specProduct2.getProductName().contains(specProduct.getProductName())){
                //判断是否包含当前属性
                if (specProduct2.getProductProp().contains(specProduct.getProductProp())){
                    return 1;
                }else {
                    int i=0;
                    //根据位置进行查找更新
                    String[] split = specProduct2.getProductName().split(",");
                    for (String s : split) {
                        if (s.equals(specProduct.getProductName())){
                            break;
                        }
                        i++;
                    }
                    //分割属性
                    String[] split1 = specProduct2.getProductProp().split("/");
                    //找到对应位置的属性
                    String s = split1[i];
                    //拼接,
                    s=s.concat(",")+specProduct.getProductProp();
                    String productProp="";
                    //进行循环拼接
                    for (int i1 = 0; i1 < split1.length; i1++) {
                        //如果已经存在
                        if (s.contains(split1[i1])){
                            //将数据拼接上去并加上斜杆用于区分别的规格属性
                            productProp=productProp+s+"/";
                            continue;
                        }
                        //拼接属性(因为分割过后属性中没有斜杠所以拼接时应加上斜杠)
                         productProp+=split1[i1]+"/";
                    }
                    System.out.println(productProp);
                    Long id=specProduct2.getId();
                    System.out.println(id);
                    //因为是所有属性的分割所以后面会多出一个斜杠要将斜杠去除
                    productProp=productProp.substring(0,productProp.length()-1);
                    Map<String, Object> map = new HashMap<>();
                    map.put("productProp",productProp);
                    map.put("id",id);
                    return specProductMapper.updateSpecProductByProductProp(map);
                }
            }
            return specProductMapper.updateSpecProductByProductName(specProduct);
        }
        return specProductMapper.insertSpecProduct(specProduct);
    }

    /**
     * 修改商品规格分类
     * 
     * @param specProduct 商品规格分类
     * @return 结果
     */
    @Override
    public int updateSpecProduct(SpecProduct specProduct)
    {
        return specProductMapper.updateSpecProduct(specProduct);
    }

    /**
     * 批量删除商品规格分类
     * 
     * @param ids 需要删除的商品规格分类主键
     * @return 结果
     */
    @Override
    public int deleteSpecProductByIds(Long[] ids)
    {
        return specProductMapper.deleteSpecProductByIds(ids);
    }

    /**
     * 删除商品规格分类信息
     * 
     * @param id 商品规格分类主键
     * @return 结果
     */
    @Override
    public int deleteSpecProductById(Long id)
    {
        return specProductMapper.deleteSpecProductById(id);
    }
}
